--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit ee5a71361a1f9748f29c358ae9c56aa1276d2d13
Parents : 5080679
Author : Sudo-Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-01-14T19:03:00-06:00
4.1.0
Changes
13 files changed, 348 insertions(+), 308 deletions(-)
Diff
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d767d73f..3c15b689 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,46 @@
All notable changes to this project will be documented in this file.
-## [4.0.0] - 2026-01-03
+## [4.1.0] - 2026-01-14
+
+### New Features
+
+- **Advanced Diagnostic Engine**:
+ - Mathematically grounded crash recovery system using **Probabilistic Active Inference**, **Shannon Entropy**, and **KL-Divergence**.
+ - **Deterministic Manifold Constraints**: Actively monitors structural system laws (V1: Version Integrity, V4: Resource Capacity).
+ - **Failure Manifold Mapping**: Identifies "Failure Manifolds" across the vertical stack, including RNS identity failures, LXMF storage issues, and interface offline states.
+- **RNS Auto-Configuration**:
+ - Automatic creation and repair of the Reticulum configuration file (`~/.reticulum/config`) if it is missing, invalid, or corrupt.
+- **Improved Installation**:
+ - Added support and documentation for installing via **Pre-built Wheels (.whl)** from releases, which bundle the built frontend for a simpler setup experience.
+- **Network Visualiser Optimization**:
+ - Implemented **AbortController** support to cancel pending API requests on component unmount.
+ - Added high-performance batch fetching for path tables and announces (up to 1000 items per request).
+- **Announce Pagination**:
+ - Added backend and database-level pagination for announces to improve UI responsiveness in large networks.
+
+### Improvements
+
+- **Reliability & Memory Management**:
+ - Fixed a major concurrency issue where in-memory SQLite databases (`:memory:`) were not shared across background threads, causing "no such table" errors.
+ - Resolved `asyncio` event loop race conditions in `WebAudioBridge` using a lazy-loading loop property with fallback.
+ - Refactored `IdentityContext` teardown to ensure all managers are properly nullified and callbacks cleared, preventing memory leaks and reference cycles.
+ - Added client list cleanup in `WebAudioBridge` when calls end.
+- **UI/UX**:
+ - Fixed a critical hang in the **Startup Wizard** where "Finish" or "Skip" buttons could become unresponsive.
+ - Improved UI navigation safety by automatically closing the tutorial modal when navigating away.
+ - Refined `MarkdownRenderer` regex patterns to prevent empty bold/italic tags and improved matching for single delimiters.
+- **Infrastructure & CI**:
+ - Added dedicated build scripts for **Arch Linux** packaging to handle permissions and `makepkg` execution.
+ - Updated Docker dev-image workflows to trigger on master branch pushes.
+ - Refactored telemetry data packing for more efficient location transmission.
+ - Updated dependencies including **Electron Forge (7.11.1)**, **Prettier (3.8.0)**, and ESLint plugins for better stability and formatting.
+- **Testing**:
+ - Significant expansion of the test suite with **Property-Based Testing** (using `hypothesis`) to ensure robustness of the diagnostic engine, identity restoration, and markdown renderer.
+ - Added automated verification for Python version and legacy kernel compatibility diagnostics.
+ - Configured temporary log directory management for tests to improve portability.
+
+### [4.0.0] - 2026-01-03
Season 1 Episode 1 - A MASSIVE REFACTOR
diff --git a/README.md b/README.md
index 72e66e49..9fbe008f 100644
--- a/README.md
+++ b/README.md
@@ -59,10 +59,10 @@ The simplest way to install MeshChatX on most systems is using the pre-built whe
1. **Install directly from the release**:
```bash
- pip install https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.0.0/reticulum_meshchatx-4.0.0-py3-none-any.whl
+ pip install https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.1.0/reticulum_meshchatx-4.1.0-py3-none-any.whl
# pipx
- pipx install https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.0.0/reticulum_meshchatx-4.0.0-py3-none-any.whl
+ pipx install https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.1.0/reticulum_meshchatx-4.1.0-py3-none-any.whl
```
2. **Run MeshChatX**:
diff --git a/flake.nix b/flake.nix
index 97b3207e..1cdb4fa2 100644
--- a/flake.nix
+++ b/flake.nix
@@ -74,7 +74,7 @@
# Simple package definition for the backend
packages.default = pkgs.python312Packages.buildPythonPackage {
pname = "reticulum-meshchatx";
- version = "4.0.0";
+ version = "4.1.0";
src = ./.;
format = "pyproject";
diff --git a/meshchatx/__init__.py b/meshchatx/__init__.py
index 481e81cb..5112b658 100644
--- a/meshchatx/__init__.py
+++ b/meshchatx/__init__.py
@@ -1,3 +1,3 @@
"""Reticulum MeshChatX - A mesh network communications app."""
-__version__ = "3.0.0"
+__version__ = "4.1.0"
diff --git a/meshchatx/src/version.py b/meshchatx/src/version.py
index 944c64d5..fc3ecfdc 100644
--- a/meshchatx/src/version.py
+++ b/meshchatx/src/version.py
@@ -2,4 +2,4 @@
share the same version string.
"""
-__version__ = "4.0.0"
+__version__ = "4.1.0"
diff --git a/package.json b/package.json
index e3492e15..9e39dd25 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "reticulum-meshchatx",
- "version": "4.0.0",
+ "version": "4.1.0",
"description": "A simple mesh network communications app powered by the Reticulum Network Stack",
"homepage": "https://git.quad4.io/RNS-Things/MeshChatX",
"author": "Sudo-Ivan",
@@ -38,15 +38,15 @@
},
"packageManager": "pnpm@10.27.0",
"devDependencies": {
- "@electron-forge/cli": "^7.10.2",
- "@electron-forge/maker-deb": "^7.10.2",
- "@electron-forge/maker-flatpak": "^7.10.2",
- "@electron-forge/maker-rpm": "^7.10.2",
- "@electron-forge/maker-squirrel": "^7.10.2",
- "@electron-forge/maker-zip": "^7.10.2",
- "@electron-forge/plugin-auto-unpack-natives": "^7.10.2",
- "@electron-forge/plugin-fuses": "^7.10.2",
- "@electron-forge/plugin-vite": "^7.10.2",
+ "@electron-forge/cli": "^7.11.1",
+ "@electron-forge/maker-deb": "^7.11.1",
+ "@electron-forge/maker-flatpak": "^7.11.1",
+ "@electron-forge/maker-rpm": "^7.11.1",
+ "@electron-forge/maker-squirrel": "^7.11.1",
+ "@electron-forge/maker-zip": "^7.11.1",
+ "@electron-forge/plugin-auto-unpack-natives": "^7.11.1",
+ "@electron-forge/plugin-fuses": "^7.11.1",
+ "@electron-forge/plugin-vite": "^7.11.1",
"@electron/fuses": "^1.8.0",
"@eslint/js": "^9.39.2",
"@rushstack/eslint-patch": "^1.15.0",
@@ -59,13 +59,13 @@
"electron-builder-squirrel-windows": "^26.4.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
- "eslint-plugin-prettier": "^5.5.4",
+ "eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-security": "^3.0.1",
"eslint-plugin-vue": "^10.6.2",
"globals": "^16.5.0",
"jsdom": "^26.1.0",
"postcss": "^8.5.6",
- "prettier": "^3.7.4",
+ "prettier": "^3.8.0",
"tailwindcss": "^3.4.19",
"terser": "^5.44.1",
"vitest": "^3.2.4"
diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD
index b9b6e031..eb40fd94 100644
--- a/packaging/arch/PKGBUILD
+++ b/packaging/arch/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: Ivan <ivan@quad4.io>
pkgname=reticulum-meshchatx-git
_pkgname=reticulum-meshchatx
-pkgver=4.0.0.r7.g9cfbf94
+pkgver=4.1.0.r7.g9cfbf94
pkgrel=1
pkgdesc="A simple mesh network communications app powered by the Reticulum Network Stack"
arch=('x86_64' 'aarch64')
@@ -19,7 +19,7 @@ sha256sums=('SKIP'
pkgver() {
cd "$_pkgname"
git describe --long --tags 2>/dev/null | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' || \
- printf "4.0.0.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
+ printf "4.1.0.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
prepare() {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fe985558..53985608 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,7 +22,7 @@ importers:
version: 0.5.11(tailwindcss@3.4.19)
'@vitejs/plugin-vue':
specifier: ^5.2.4
- version: 5.2.4(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))
+ version: 5.2.4(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))
axios:
specifier: ^1.13.2
version: 1.13.2
@@ -64,10 +64,10 @@ importers:
version: 9.1.13(@egjs/hammerjs@2.0.17)(component-emitter@2.0.0)(keycharm@0.4.0)(uuid@11.1.0)(vis-data@7.1.10(uuid@11.1.0)(vis-util@5.0.7(@egjs/hammerjs@2.0.17)(component-emitter@2.0.0)))(vis-util@5.0.7(@egjs/hammerjs@2.0.17)(component-emitter@2.0.0))
vite:
specifier: ^6.4.1
- version: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ version: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
vite-plugin-vuetify:
specifier: ^2.1.2
- version: 2.1.2(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6)
+ version: 2.1.2(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6)
vue:
specifier: ^3.5.26
version: 3.5.26(typescript@5.9.3)
@@ -82,32 +82,32 @@ importers:
version: 3.11.6(typescript@5.9.3)(vite-plugin-vuetify@2.1.2)(vue@3.5.26(typescript@5.9.3))
devDependencies:
'@electron-forge/cli':
- specifier: ^7.10.2
- version: 7.10.2(encoding@0.1.13)
+ specifier: ^7.11.1
+ version: 7.11.1(encoding@0.1.13)
'@electron-forge/maker-deb':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/maker-flatpak':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/maker-rpm':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/maker-squirrel':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/maker-zip':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/plugin-auto-unpack-natives':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron-forge/plugin-fuses':
- specifier: ^7.10.2
- version: 7.10.2(@electron/fuses@1.8.0)
+ specifier: ^7.11.1
+ version: 7.11.1(@electron/fuses@1.8.0)
'@electron-forge/plugin-vite':
- specifier: ^7.10.2
- version: 7.10.2
+ specifier: ^7.11.1
+ version: 7.11.1
'@electron/fuses':
specifier: ^1.8.0
version: 1.8.0
@@ -122,7 +122,7 @@ importers:
version: 0.5.19(tailwindcss@3.4.19)
'@vue/eslint-config-prettier':
specifier: ^10.2.0
- version: 10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@1.21.7))(prettier@3.7.4)
+ version: 10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@1.21.7))(prettier@3.8.0)
'@vue/test-utils':
specifier: ^2.4.6
version: 2.4.6
@@ -145,8 +145,8 @@ importers:
specifier: ^10.1.8
version: 10.1.8(eslint@9.39.2(jiti@1.21.7))
eslint-plugin-prettier:
- specifier: ^5.5.4
- version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.7.4)
+ specifier: ^5.5.5
+ version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.8.0)
eslint-plugin-security:
specifier: ^3.0.1
version: 3.0.1
@@ -163,8 +163,8 @@ importers:
specifier: ^8.5.6
version: 8.5.6
prettier:
- specifier: ^3.7.4
- version: 3.7.4
+ specifier: ^3.8.0
+ version: 3.8.0
tailwindcss:
specifier: ^3.4.19
version: 3.4.19
@@ -173,7 +173,7 @@ importers:
version: 5.44.1
vitest:
specifier: ^3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@25.0.3)(jiti@1.21.7)(jsdom@26.1.0)(terser@5.44.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@25.0.8)(jiti@1.21.7)(jsdom@26.1.0)(terser@5.44.1)
packages:
@@ -195,13 +195,13 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.5':
- resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.28.5':
- resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
engines: {node: '>=6.9.0'}
'@csstools/color-helpers@5.1.0':
@@ -240,91 +240,91 @@ packages:
resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==}
engines: {node: '>=0.8.0'}
- '@electron-forge/cli@7.10.2':
- resolution: {integrity: sha512-X1RtS5IqNgzGDS2rr1q0Y74wU/m3DbU4vSgllNun1ZQv1BfMpDcKLhnKi3aeetoA0huLTpMVU9eWJ7bziI9fxA==}
+ '@electron-forge/cli@7.11.1':
+ resolution: {integrity: sha512-pk8AoLsr7t7LBAt0cFD06XFA6uxtPdvtLx06xeal7O9o7GHGCbj29WGwFoJ8Br/ENM0Ho868S3PrAn1PtBXt5g==}
engines: {node: '>= 16.4.0'}
hasBin: true
- '@electron-forge/core-utils@7.10.2':
- resolution: {integrity: sha512-JXrk2hWR4q8KgZFABpojjuqql3tYeVIH6qmtbkNEkZEQq7YIxajJBCct7J7bWfNQTmHotsQ3k5KLknhyhTaBMw==}
+ '@electron-forge/core-utils@7.11.1':
+ resolution: {integrity: sha512-9UxRWVsfcziBsbAA2MS0Oz4yYovQCO2BhnGIfsbKNTBtMc/RcVSxAS0NMyymce44i43p1ZC/FqWhnt1XqYw3bQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/core@7.10.2':
- resolution: {integrity: sha512-HAIuOtpOfGjA0cd55tbEV2gAv+A7tSZg9bonmVDYFEe6dBgbLk8a3+/1fJUdWW8fyFkg1wa8zK7pjP751bAXsA==}
+ '@electron-forge/core@7.11.1':
+ resolution: {integrity: sha512-YtuPLzggPKPabFAD2rOZFE0s7f4KaUTpGRduhSMbZUqpqD1TIPyfoDBpYiZvao3Ht8pyZeOJjbzcC0LpFs9gIQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-base@7.10.2':
- resolution: {integrity: sha512-1QN4qnPVTjo+qWYG+s0kYv7XcuIowsPVvbl718FgJUcvkxyRjUA6kWHjFxRvdV6g7Sa2PzZBF+/Mrjpws1lehQ==}
+ '@electron-forge/maker-base@7.11.1':
+ resolution: {integrity: sha512-yhZrCGoN6bDeiB5DHFaueZ1h84AReElEj+f0hl2Ph4UbZnO0cnLpbx+Bs+XfMLAiA+beC8muB5UDK5ysfuT9BQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-deb@7.10.2':
- resolution: {integrity: sha512-4MPr9NW5UbEUbf9geZn5R/0O/QVIiy2EgUXOYOeKkA7oR8U6I1I3+BytYFHYcxbY6+PGhi1H1VTLJLITbHGVWw==}
+ '@electron-forge/maker-deb@7.11.1':
+ resolution: {integrity: sha512-QTYiryQLYPDkq6pIfBmx0GQ6D8QatUkowH7rTlW5MnCUa0uumX0Xu7yGIjesuwW37fxT3Lv4xi+FSXMCm2eC1w==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-flatpak@7.10.2':
- resolution: {integrity: sha512-LldkYGkIhri99+HqetGjNzi2cdXy32o5uLlr7fDLoiegm8WAkvvWxFTLdSDS1RP94f6PVOKR9KHqPauu5GaIYw==}
+ '@electron-forge/maker-flatpak@7.11.1':
+ resolution: {integrity: sha512-H7+aa1OkJUHBj08DdbhSz2gL1hD/IowYpVS+uv7e6PcDqRYy/5XQQ2FoX52+3Qlik8d+tai7iOzVGcqb+D7f0Q==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-rpm@7.10.2':
- resolution: {integrity: sha512-LQoeYzbY/z1yuBBA+bNutCJmhCA4NcXUbFO4OTqsIX8B6y1zNTYZT4JEuhoK7eBsP4/Rz6u/JnNp0XOyjftOUQ==}
+ '@electron-forge/maker-rpm@7.11.1':
+ resolution: {integrity: sha512-iEfJPRQQyaTqk2EbUfZgulChNWvxGXeYUH0xBX/r5cj1pL4vcJXt3jLMQBVn3mk/0Ytv9UWRs8R/XuNWX6sf2w==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-squirrel@7.10.2':
- resolution: {integrity: sha512-Y5EhNSBXf4a7qcq+BK/x5qVDlQ1Gez5V+arUpDvVxf1zwvsB1aSyAjmoBrOKGYD9A5pJzjkMWMDw95MStl1W4A==}
+ '@electron-forge/maker-squirrel@7.11.1':
+ resolution: {integrity: sha512-oSg7fgad6l+X0DjtRkSpMzB0AjzyDO4mb2gzM4kTodkP1ADeiMi08bxy0ZeCESqLm5+fG72cAPmEr3BAPvI1yw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-zip@7.10.2':
- resolution: {integrity: sha512-APRqVPM+O1rj4O7sk5f8tqJpS5UgxcUJEsCnXN4JRpdRvsOlMopzYZdazlCLH9l7S+r4ZKirjtMluIGeYq8YOg==}
+ '@electron-forge/maker-zip@7.11.1':
+ resolution: {integrity: sha512-30rcp0AbJLfkFBX2hmO14LKXx7z9V61LffTVbTCFMh5vUB2kZvcA5xAhsBk2oUJWfGVxe1DuSEU0rDR9bUMHUg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/plugin-auto-unpack-natives@7.10.2':
- resolution: {integrity: sha512-uQnahm1DECwqI8hBC7PKccyfovY/YqHNz8de3OxyjQDmwsqQfCA8Ucyh1E9n4NMEpw6Co8KLn+qF2BuIOsftLA==}
+ '@electron-forge/plugin-auto-unpack-natives@7.11.1':
+ resolution: {integrity: sha512-5uRM3WNv7jIeDt8pLP3V4U2puWHPGJ/3qRuSE47RKgTp5qxpZidWHSYcEJJxjoqOL/7KFwSqKSQ/a36GoZV4Fg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/plugin-base@7.10.2':
- resolution: {integrity: sha512-+4YLmkLZxvS6JFXYNI4dHt8Il8iIvwk2o6lCJGwNysOUq2KOZ3Wu1He4Ko8HhKcO1VWbFvslbh57oQn963Aryw==}
+ '@electron-forge/plugin-base@7.11.1':
+ resolution: {integrity: sha512-lKpSOV1GA3FoYiD9k05i6v4KaQVmojnRgCr7d6VL1bFp13QOtXSaAWhFI9mtSY7rGElOacX6Zt7P7rPoB8T9eQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/plugin-fuses@7.10.2':
- resolution: {integrity: sha512-X8FaBL5pVvKCTBNaa9EjbH6vuaeIU7UcPSmP9501XF4zcKPCfTbQKz49LTMl7gd5YzUm82IlqRjte12LLpcSDQ==}
+ '@electron-forge/plugin-fuses@7.11.1':
+ resolution: {integrity: sha512-Td517mHf+RjQAayFDM2kKb7NaGdRXrZfPbc7KOHlGbXthp5YTkFu2cCZGWokiqt1y1wsFaAodULhqBIg7vbbbw==}
engines: {node: '>= 16.4.0'}
peerDependencies:
'@electron/fuses': ^1.0.0
- '@electron-forge/plugin-vite@7.10.2':
- resolution: {integrity: sha512-aHotwaVlbSwVDb+Z+JdU6cMYhestt8ncmXKv4Uwm7of/gWAdvS7o/ohQVWkjXhzSidriCTwFMRz4jELJbnkNeg==}
+ '@electron-forge/plugin-vite@7.11.1':
+ resolution: {integrity: sha512-kc/WQs/0+9VC9Q4oSSocMa02YxKDvAYxhWtNcL+qlswZMJlxe8gX7vl/yXq9AjPQxw7f3jzf7nruUPKQ+vyLLg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/publisher-base@7.10.2':
- resolution: {integrity: sha512-2k2VOY0wOoAgQoQXn/u3EJ2Ka2v363+wC/+zUMTWGeRHW8pRwX84WX2SpsTttRzbsqAEMJYw5FAzgMBEQUTfpg==}
+ '@electron-forge/publisher-base@7.11.1':
+ resolution: {integrity: sha512-rXE9oMFGMtdQrixnumWYH5TTGsp99iPHZb3jI74YWq518ctCh6DlIgWlhf6ok2X0+lhWovcIb45KJucUFAQ13w==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/shared-types@7.10.2':
- resolution: {integrity: sha512-e2pd9RsdbKwsNf6UtKoolmJGy92Nc0/XO4SI91doV8cM954hM2XSYz3VHoqXebMFAF1JDfXoEUt6UCRbEDgMgw==}
+ '@electron-forge/shared-types@7.11.1':
+ resolution: {integrity: sha512-vvBWdAEh53UJlDGUevpaJk1+sqDMQibfrbHR+0IPA4MPyQex7/Uhv3vYH9oGHujBVAChQahjAuJt0fG6IJBLZg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-base@7.10.2':
- resolution: {integrity: sha512-D9DbEx3rtikIhUyn4tcz2pJqHNU/+FXKNnzSvmrJoJ9LusR3C42OU9GtbU8oT3nawpnCGgPFIOGXrzexFPp6DA==}
+ '@electron-forge/template-base@7.11.1':
+ resolution: {integrity: sha512-XpTaEf+EfQw+0BlSAtSpZKYIKYvKu4raNzSGHZZoSYHp+HDC7R+MlpFQmSJiGdYQzQ14C+uxO42tVjgM0DMbpw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-vite-typescript@7.10.2':
- resolution: {integrity: sha512-df7rpxxIOIyZn0RfQ1GIlLW7dXhxkerc9uZ3ozO4C7zfvip3z0Mg+wS1synktPfr4WISaPktIdnj3mVu6Uu7Mw==}
+ '@electron-forge/template-vite-typescript@7.11.1':
+ resolution: {integrity: sha512-Us4AHXFb+4z+gXgZImSqMBS63oKnsQWLOhqRg321xiDzu2UcQPlwgWNb4rAEKNVC1e7LXrUNDHuBiTrQkvWXbg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-vite@7.10.2':
- resolution: {integrity: sha512-hR9HBOM902yq7zhFl8bO3w5ufMgitdd5ZwDzAdKITFh2ttZemHy9ha5S0K+R+4GoXHz8t7hUTHk8+iPy09qrpA==}
+ '@electron-forge/template-vite@7.11.1':
+ resolution: {integrity: sha512-Or8Lxf4awoeUZoMTKJEw5KQDIhqOFs24WhVka3yZXxc6VgVWN79KmYKYM6uM/YMQttmafhsBhY2t1Lxo1WR/ug==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-webpack-typescript@7.10.2':
- resolution: {integrity: sha512-JtrLUAFbxxWJ1kU7b8MNyL5SO9/rY5UeNz1b9hvMvilW8GxyMWUen58dafgdnx3OpKLNZnhOOhgRagNppEzJOA==}
+ '@electron-forge/template-webpack-typescript@7.11.1':
+ resolution: {integrity: sha512-6ExfFnFkHBz8rvRFTFg5HVGTC12uJpbVk4q8DVg0R8rhhxhqiVNh8lF2UPtZ2yT2UtGWjXNVlyP3Y3T6q6E3GQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-webpack@7.10.2':
- resolution: {integrity: sha512-VIUXA+XHM5SLjg7fIpOOmBsgi0LstkjrEz4gUzVL0AaITM7e+BCziIHld1ceXLbQ1FnKtrUGnQ9X/cHYxYvhHg==}
+ '@electron-forge/template-webpack@7.11.1':
+ resolution: {integrity: sha512-15lbXxi+er461MPk6sbwAOyjofAHwmQjTvxNCiNpaU2naEwbj3t0SlLq/BMr5HxnVOaMmA7+lKV9afkIom+d4Q==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/tracer@7.10.2':
- resolution: {integrity: sha512-jhLLQbttfZViSOYn/3SJc8HML+jNZAytPVJwgGGd3coUiFysWJ2Xald99iqOiouPAhIigBfNPxQb/q/EbcDu4g==}
+ '@electron-forge/tracer@7.11.1':
+ resolution: {integrity: sha512-tiB6cglVQFcSw9N8GRwVwZUeB9u0DOx2Mj7aFXBUsFLUYQapvVGv51tUSy/UAW5lvmubGscYIILuVko+II3+NA==}
engines: {node: '>= 14.17.5'}
'@electron/asar@3.4.1':
@@ -995,11 +995,11 @@ packages:
'@types/mute-stream@0.0.4':
resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
- '@types/node@22.19.3':
- resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==}
+ '@types/node@22.19.6':
+ resolution: {integrity: sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==}
- '@types/node@25.0.3':
- resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
+ '@types/node@25.0.8':
+ resolution: {integrity: sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==}
'@types/plist@3.0.5':
resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
@@ -1058,8 +1058,8 @@ packages:
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
- '@vscode/sudo-prompt@9.3.1':
- resolution: {integrity: sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==}
+ '@vscode/sudo-prompt@9.3.2':
+ resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==}
'@vue/compiler-core@3.5.26':
resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==}
@@ -1323,8 +1323,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.9.12:
- resolution: {integrity: sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw==}
+ baseline-browser-mapping@2.9.14:
+ resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==}
hasBin: true
binary-extensions@2.3.0:
@@ -1414,8 +1414,8 @@ packages:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001762:
- resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==}
+ caniuse-lite@1.0.30001764:
+ resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==}
chai@5.3.3:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
@@ -1838,8 +1838,8 @@ packages:
peerDependencies:
eslint: '>=7.0.0'
- eslint-plugin-prettier@5.5.4:
- resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
+ eslint-plugin-prettier@5.5.5:
+ resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
'@types/eslint': '>=8.0.0'
@@ -3044,8 +3044,8 @@ packages:
resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
engines: {node: '>=6.0.0'}
- prettier@3.7.4:
- resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ prettier@3.8.0:
+ resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==}
engines: {node: '>=14'}
hasBin: true
@@ -3242,8 +3242,9 @@ packages:
sanitize-filename@1.6.3:
resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
- sax@1.4.3:
- resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
saxes@6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
@@ -3439,8 +3440,8 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
- synckit@0.11.11:
- resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
+ synckit@0.11.12:
+ resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
engines: {node: ^14.18.0 || >=16.0.0}
tailwindcss@3.4.19:
@@ -3991,11 +3992,11 @@ snapshots:
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.5':
+ '@babel/parser@7.28.6':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
- '@babel/types@7.28.5':
+ '@babel/types@7.28.6':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
@@ -4029,11 +4030,11 @@ snapshots:
dependencies:
'@types/hammerjs': 2.0.46
- '@electron-forge/cli@7.10.2(encoding@0.1.13)':
+ '@electron-forge/cli@7.11.1(encoding@0.1.13)':
dependencies:
- '@electron-forge/core': 7.10.2(encoding@0.1.13)
- '@electron-forge/core-utils': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/core': 7.11.1(encoding@0.1.13)
+ '@electron-forge/core-utils': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
'@electron/get': 3.1.0
'@inquirer/prompts': 6.0.1
'@listr2/prompt-adapter-inquirer': 2.0.22(@inquirer/prompts@6.0.1)
@@ -4053,9 +4054,9 @@ snapshots:
- uglify-js
- webpack-cli
- '@electron-forge/core-utils@7.10.2':
+ '@electron-forge/core-utils@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
'@electron/rebuild': 3.7.2
'@malept/cross-spawn-promise': 2.0.0
chalk: 4.1.2
@@ -4069,24 +4070,24 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/core@7.10.2(encoding@0.1.13)':
- dependencies:
- '@electron-forge/core-utils': 7.10.2
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/plugin-base': 7.10.2
- '@electron-forge/publisher-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
- '@electron-forge/template-base': 7.10.2
- '@electron-forge/template-vite': 7.10.2
- '@electron-forge/template-vite-typescript': 7.10.2
- '@electron-forge/template-webpack': 7.10.2
- '@electron-forge/template-webpack-typescript': 7.10.2
- '@electron-forge/tracer': 7.10.2
+ '@electron-forge/core@7.11.1(encoding@0.1.13)':
+ dependencies:
+ '@electron-forge/core-utils': 7.11.1
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/plugin-base': 7.11.1
+ '@electron-forge/publisher-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
+ '@electron-forge/template-base': 7.11.1
+ '@electron-forge/template-vite': 7.11.1
+ '@electron-forge/template-vite-typescript': 7.11.1
+ '@electron-forge/template-webpack': 7.11.1
+ '@electron-forge/template-webpack-typescript': 7.11.1
+ '@electron-forge/tracer': 7.11.1
'@electron/get': 3.1.0
'@electron/packager': 18.4.4
'@electron/rebuild': 3.7.2
'@malept/cross-spawn-promise': 2.0.0
- '@vscode/sudo-prompt': 9.3.1
+ '@vscode/sudo-prompt': 9.3.2
chalk: 4.1.2
debug: 4.4.3
fast-glob: 3.3.3
@@ -4114,29 +4115,29 @@ snapshots:
- uglify-js
- webpack-cli
- '@electron-forge/maker-base@7.10.2':
+ '@electron-forge/maker-base@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
fs-extra: 10.1.0
which: 2.0.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-deb@7.10.2':
+ '@electron-forge/maker-deb@7.11.1':
dependencies:
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
optionalDependencies:
electron-installer-debian: 3.2.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-flatpak@7.10.2':
+ '@electron-forge/maker-flatpak@7.11.1':
dependencies:
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
fs-extra: 10.1.0
optionalDependencies:
'@malept/electron-installer-flatpak': 0.11.4
@@ -4144,20 +4145,20 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/maker-rpm@7.10.2':
+ '@electron-forge/maker-rpm@7.11.1':
dependencies:
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
optionalDependencies:
electron-installer-redhat: 3.4.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-squirrel@7.10.2':
+ '@electron-forge/maker-squirrel@7.11.1':
dependencies:
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
fs-extra: 10.1.0
optionalDependencies:
electron-winstaller: 5.4.0
@@ -4165,10 +4166,10 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/maker-zip@7.10.2':
+ '@electron-forge/maker-zip@7.11.1':
dependencies:
- '@electron-forge/maker-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/maker-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
cross-zip: 4.0.1
fs-extra: 10.1.0
got: 11.8.6
@@ -4176,34 +4177,34 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/plugin-auto-unpack-natives@7.10.2':
+ '@electron-forge/plugin-auto-unpack-natives@7.11.1':
dependencies:
- '@electron-forge/plugin-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/plugin-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/plugin-base@7.10.2':
+ '@electron-forge/plugin-base@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/plugin-fuses@7.10.2(@electron/fuses@1.8.0)':
+ '@electron-forge/plugin-fuses@7.11.1(@electron/fuses@1.8.0)':
dependencies:
- '@electron-forge/plugin-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/plugin-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
'@electron/fuses': 1.8.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/plugin-vite@7.10.2':
+ '@electron-forge/plugin-vite@7.11.1':
dependencies:
- '@electron-forge/plugin-base': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/plugin-base': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
chalk: 4.1.2
debug: 4.4.3
fs-extra: 10.1.0
@@ -4212,16 +4213,16 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/publisher-base@7.10.2':
+ '@electron-forge/publisher-base@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/shared-types@7.10.2':
+ '@electron-forge/shared-types@7.11.1':
dependencies:
- '@electron-forge/tracer': 7.10.2
+ '@electron-forge/tracer': 7.11.1
'@electron/packager': 18.4.4
'@electron/rebuild': 3.7.2
listr2: 7.0.2
@@ -4229,10 +4230,10 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/template-base@7.10.2':
+ '@electron-forge/template-base@7.11.1':
dependencies:
- '@electron-forge/core-utils': 7.10.2
- '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/core-utils': 7.11.1
+ '@electron-forge/shared-types': 7.11.1
'@malept/cross-spawn-promise': 2.0.0
debug: 4.4.3
fs-extra: 10.1.0
@@ -4242,28 +4243,28 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/template-vite-typescript@7.10.2':
+ '@electron-forge/template-vite-typescript@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
- '@electron-forge/template-base': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
+ '@electron-forge/template-base': 7.11.1
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/template-vite@7.10.2':
+ '@electron-forge/template-vite@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
- '@electron-forge/template-base': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
+ '@electron-forge/template-base': 7.11.1
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/template-webpack-typescript@7.10.2':
+ '@electron-forge/template-webpack-typescript@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
- '@electron-forge/template-base': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
+ '@electron-forge/template-base': 7.11.1
fs-extra: 10.1.0
typescript: 5.4.5
webpack: 5.104.1
@@ -4275,16 +4276,16 @@ snapshots:
- uglify-js
- webpack-cli
- '@electron-forge/template-webpack@7.10.2':
+ '@electron-forge/template-webpack@7.11.1':
dependencies:
- '@electron-forge/shared-types': 7.10.2
- '@electron-forge/template-base': 7.10.2
+ '@electron-forge/shared-types': 7.11.1
+ '@electron-forge/template-base': 7.11.1
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/tracer@7.10.2':
+ '@electron-forge/tracer@7.11.1':
dependencies:
chrome-trace-event: 1.0.4
@@ -4381,7 +4382,7 @@ snapshots:
junk: 3.1.0
parse-author: 2.0.0
plist: 3.1.0
- prettier: 3.7.4
+ prettier: 3.8.0
resedit: 2.0.3
resolve: 1.22.11
semver: 7.7.3
@@ -4605,7 +4606,7 @@ snapshots:
'@inquirer/figures': 1.0.15
'@inquirer/type': 2.0.0
'@types/mute-stream': 0.0.4
- '@types/node': 22.19.3
+ '@types/node': 22.19.6
'@types/wrap-ansi': 3.0.0
ansi-escapes: 4.3.2
cli-width: 4.1.0
@@ -4943,7 +4944,7 @@ snapshots:
dependencies:
'@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
'@types/responselike': 1.0.3
'@types/chai@5.2.3':
@@ -4971,7 +4972,7 @@ snapshots:
'@types/fs-extra@9.0.13':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
'@types/hammerjs@2.0.46': {}
@@ -4981,25 +4982,25 @@ snapshots:
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
'@types/ms@2.1.0': {}
'@types/mute-stream@0.0.4':
dependencies:
- '@types/node': 22.19.3
+ '@types/node': 22.19.6
- '@types/node@22.19.3':
+ '@types/node@22.19.6':
dependencies:
undici-types: 6.21.0
- '@types/node@25.0.3':
+ '@types/node@25.0.8':
dependencies:
undici-types: 7.16.0
'@types/plist@3.0.5':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
xmlbuilder: 15.1.1
optional: true
@@ -5007,7 +5008,7 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
'@types/trusted-types@2.0.7':
optional: true
@@ -5019,12 +5020,12 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 22.19.3
+ '@types/node': 22.19.6
optional: true
- '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))':
+ '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))':
dependencies:
- vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ vite: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
vue: 3.5.26(typescript@5.9.3)
'@vitest/expect@3.2.4':
@@ -5035,13 +5036,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))':
+ '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ vite: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -5069,11 +5070,11 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
- '@vscode/sudo-prompt@9.3.1': {}
+ '@vscode/sudo-prompt@9.3.2': {}
'@vue/compiler-core@3.5.26':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/shared': 3.5.26
entities: 7.0.0
estree-walker: 2.0.2
@@ -5086,7 +5087,7 @@ snapshots:
'@vue/compiler-sfc@3.5.26':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/compiler-core': 3.5.26
'@vue/compiler-dom': 3.5.26
'@vue/compiler-ssr': 3.5.26
@@ -5103,12 +5104,12 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
- '@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@1.21.7))(prettier@3.7.4)':
+ '@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@1.21.7))(prettier@3.8.0)':
dependencies:
eslint: 9.39.2(jiti@1.21.7)
eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@1.21.7))
- eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.7.4)
- prettier: 3.7.4
+ eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.8.0)
+ prettier: 3.8.0
transitivePeerDependencies:
- '@types/eslint'
@@ -5382,7 +5383,7 @@ snapshots:
autoprefixer@10.4.23(postcss@8.5.6):
dependencies:
browserslist: 4.28.1
- caniuse-lite: 1.0.30001762
+ caniuse-lite: 1.0.30001764
fraction.js: 5.3.4
picocolors: 1.1.1
postcss: 8.5.6
@@ -5400,7 +5401,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.9.12: {}
+ baseline-browser-mapping@2.9.14: {}
binary-extensions@2.3.0: {}
@@ -5434,8 +5435,8 @@ snapshots:
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.12
- caniuse-lite: 1.0.30001762
+ baseline-browser-mapping: 2.9.14
+ caniuse-lite: 1.0.30001764
electron-to-chromium: 1.5.267
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -5452,7 +5453,7 @@ snapshots:
builder-util-runtime@9.5.1:
dependencies:
debug: 4.4.3
- sax: 1.4.3
+ sax: 1.4.4
transitivePeerDependencies:
- supports-color
@@ -5540,7 +5541,7 @@ snapshots:
camelcase@5.3.1: {}
- caniuse-lite@1.0.30001762: {}
+ caniuse-lite@1.0.30001764: {}
chai@5.3.3:
dependencies:
@@ -5936,7 +5937,7 @@ snapshots:
electron@39.2.7:
dependencies:
'@electron/get': 2.0.3
- '@types/node': 22.19.3
+ '@types/node': 22.19.6
extract-zip: 2.0.1
transitivePeerDependencies:
- supports-color
@@ -6032,12 +6033,12 @@ snapshots:
dependencies:
eslint: 9.39.2(jiti@1.21.7)
- eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.7.4):
+ eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(prettier@3.8.0):
dependencies:
eslint: 9.39.2(jiti@1.21.7)
- prettier: 3.7.4
+ prettier: 3.8.0
prettier-linter-helpers: 1.0.1
- synckit: 0.11.11
+ synckit: 0.11.12
optionalDependencies:
'@types/eslint': 9.6.1
eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@1.21.7))
@@ -6626,7 +6627,7 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -7271,7 +7272,7 @@ snapshots:
dependencies:
fast-diff: 1.3.0
- prettier@3.7.4: {}
+ prettier@3.8.0: {}
proc-log@2.0.1: {}
@@ -7300,7 +7301,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
long: 5.3.2
protocol-buffers-schema@3.6.0: {}
@@ -7488,7 +7489,7 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
- sax@1.4.3: {}
+ sax@1.4.4: {}
saxes@6.0.0:
dependencies:
@@ -7684,7 +7685,7 @@ snapshots:
symbol-tree@3.2.4: {}
- synckit@0.11.11:
+ synckit@0.11.12:
dependencies:
'@pkgr/core': 0.2.9
@@ -7921,13 +7922,13 @@ snapshots:
'@egjs/hammerjs': 2.0.17
component-emitter: 2.0.0
- vite-node@3.2.4(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1):
+ vite-node@3.2.4(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ vite: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -7942,18 +7943,18 @@ snapshots:
- tsx
- yaml
- vite-plugin-vuetify@2.1.2(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6):
+ vite-plugin-vuetify@2.1.2(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6):
dependencies:
'@vuetify/loader-shared': 2.1.1(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6)
debug: 4.4.3
upath: 2.0.1
- vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ vite: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
vue: 3.5.26(typescript@5.9.3)
vuetify: 3.11.6(typescript@5.9.3)(vite-plugin-vuetify@2.1.2)(vue@3.5.26(typescript@5.9.3))
transitivePeerDependencies:
- supports-color
- vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1):
+ vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -7962,16 +7963,16 @@ snapshots:
rollup: 4.55.1
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
fsevents: 2.3.3
jiti: 1.21.7
terser: 5.44.1
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.0.3)(jiti@1.21.7)(jsdom@26.1.0)(terser@5.44.1):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.0.8)(jiti@1.21.7)(jsdom@26.1.0)(terser@5.44.1):
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))
+ '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -7989,12 +7990,12 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
- vite-node: 3.2.4(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)
+ vite: 6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
+ vite-node: 3.2.4(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 25.0.3
+ '@types/node': 25.0.8
jsdom: 26.1.0
transitivePeerDependencies:
- jiti
@@ -8051,7 +8052,7 @@ snapshots:
vue: 3.5.26(typescript@5.9.3)
optionalDependencies:
typescript: 5.9.3
- vite-plugin-vuetify: 2.1.2(vite@6.4.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6)
+ vite-plugin-vuetify: 2.1.2(vite@6.4.1(@types/node@25.0.8)(jiti@1.21.7)(terser@5.44.1))(vue@3.5.26(typescript@5.9.3))(vuetify@3.11.6)
w3c-xmlserializer@5.0.0:
dependencies:
diff --git a/poetry.lock b/poetry.lock
index 710ae8d9..db2b0b5c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -875,81 +875,81 @@ files = [
[[package]]
name = "freeze-core"
-version = "0.4.2"
+version = "0.5.0"
description = "Core dependency for cx_Freeze"
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "freeze_core-0.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e59695d4b3543dc89fc9c8464ca076a5c8083962452da3ecc51cd2ad6777ab7f"},
- {file = "freeze_core-0.4.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e6a1e733be02b986ef373e183066b0bdececde241fee88e28a5af96cce6b4a3"},
- {file = "freeze_core-0.4.2-cp310-cp310-win32.whl", hash = "sha256:eb0513828dae5f4622f9a354ad17c5cc3aec81bf53c4bece3d414fe54482599e"},
- {file = "freeze_core-0.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:e36417771af59d6a6bc7677085c1d1892b6874264ce50a878c76bc47e7da3ec8"},
- {file = "freeze_core-0.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3663eb7f994c3976bda99dc72aa8bd8536ff2eea7e1458cbfd5eeae928b0e0f9"},
- {file = "freeze_core-0.4.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cdee0ac751117fd4b70b1de2053a8c3d217a57aed4d55e67ded70f87bc83e4e7"},
- {file = "freeze_core-0.4.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9655614fdfd85005987f6d37f761f203417581bd30716a612e018fc5e711b877"},
- {file = "freeze_core-0.4.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282937d91e056ecec3eac794111f943075d08c3dfec3c8efc88d6529b7ff153d"},
- {file = "freeze_core-0.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eeda39821eed2a98f74611badc2ea390c124542cbe8ff912e7f536d20e11ea73"},
- {file = "freeze_core-0.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f96df0f8e8839817bc58b7b942d0f3af54f4b7730bfcf86f2db524126f389f97"},
- {file = "freeze_core-0.4.2-cp311-cp311-win32.whl", hash = "sha256:a2923128672f97058a1fe15cf4dee0ac674467a178f71c092a5d9a94a4d0be8b"},
- {file = "freeze_core-0.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:43860e0214d9fc5e41f0c17f931773e80f870a791ea647940017bb83d81c5e66"},
- {file = "freeze_core-0.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:4a2a26acba4f3693a495a14f8481b15c6dbef99d0b5b1fcef96234b4947d2030"},
- {file = "freeze_core-0.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ba4915dbf799dade21a96eb9c521c9b0f9a2496ebe510fa54b6e6bd421fb174"},
- {file = "freeze_core-0.4.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:db330723a6b899b32dfa038efc8cfc4f9936a01561549f75dfaeb83f13eb74a2"},
- {file = "freeze_core-0.4.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d02a5ea6e87242ccf228304f0483df61873b1432e75c74e1de53013d084ead9e"},
- {file = "freeze_core-0.4.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0d2f1a9aea27825f5311f23a9b5ed52a7b0d8d5a6bb1231318252089339ae1c4"},
- {file = "freeze_core-0.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e5e35148ed4776d572a7b6678c2bbd6e1eb21782f0da65d6276aa52b29b392b"},
- {file = "freeze_core-0.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be464f358ba802fad1d7907767a4875a520f8a2d655026e2cc405b22f86c54eb"},
- {file = "freeze_core-0.4.2-cp312-cp312-win32.whl", hash = "sha256:439f3ebc79adf0ca575c20364cd266e75a222e47ae4840db3c3bdbc8d296c8dc"},
- {file = "freeze_core-0.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced01393db4592d5eb86be4db5d7e57f70baf5f90968718c1b52960b09e04660"},
- {file = "freeze_core-0.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:9d978b30f92f475c863e11485dac4a810c552dd8d5376a1e3d69b4068b18ace4"},
- {file = "freeze_core-0.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e822d7dadf6c4135072c86bdca2c5eea4772f32438eed497457d5c5be869b989"},
- {file = "freeze_core-0.4.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc471a64d13ab203402b58b41b0dd63b654dfca6741d9e9582e08275a2a582bd"},
- {file = "freeze_core-0.4.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:96b5ba541739d7e2821db1d3eb3bbc61364be5da017ba2e3461d85b5529d7ca4"},
- {file = "freeze_core-0.4.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a8a56975e6d4fe17ac9237a6578cb7e07c124698aae7c99345fa5615e7462ad"},
- {file = "freeze_core-0.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dbec55ae2a5e7f6dbba4f62089542c1239c76adedf08ad38209397d0027c5695"},
- {file = "freeze_core-0.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cad2c3e9815267ecb3510acbc87ba15913b6dc01e9f8e09e81599389b31c7a2c"},
- {file = "freeze_core-0.4.2-cp313-cp313-win32.whl", hash = "sha256:e5398a9523efbfe1d8350ccd9587b5f3a1612ccd9a26fa35ad159399d4857fb1"},
- {file = "freeze_core-0.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:d125534089278c790864ed723d301290450bb80f47aab0b17254a6f085d70a01"},
- {file = "freeze_core-0.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:82a8e980b2e0f723adaf6fbe0ccba8b3a86976689f7cdeb03609a65be45e22ad"},
- {file = "freeze_core-0.4.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:bafd9dc93d35babc33681c48e1597f73c44cb12fdf599d0a87c967a00c1dfc50"},
- {file = "freeze_core-0.4.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f8389f3aa06d800252a725b0f13a38dcaa88b3164428c0d023066ba796353fe9"},
- {file = "freeze_core-0.4.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4877158870eb6ec22eb7e8d639c066ffe9ebf87d61b429094e77564bcc33f2f0"},
- {file = "freeze_core-0.4.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:438336cdae8d742aed7c33e2e957b2be6458bdebe5dbd66e9ae7912bcaffa7d3"},
- {file = "freeze_core-0.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3eec7e9eb34effbaf99bf405761f6f871d8e854a7128d21211f659960c8084f1"},
- {file = "freeze_core-0.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9e998ebd1a448a0384ea4f1c13f3b360baffc86776ffb745dce0bc8f189dc9f5"},
- {file = "freeze_core-0.4.2-cp313-cp313t-win32.whl", hash = "sha256:afad0fd1431114f3ea6e1592647f9a4bbfefa37e15606bb606b9cafe6d038ba4"},
- {file = "freeze_core-0.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e7db75a7c889d4113dbf0c2ce060f79e2fe22ce9149df7c1ea9332f20d5da76d"},
- {file = "freeze_core-0.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:497acb3e7d4d0bc9ab6374e9f01388d4b5a9f26e1d5fd730b515cdaa25532949"},
- {file = "freeze_core-0.4.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:cf9ec119cf4c91e9a1137826b35648ede032c3795577db1814d922e76f4ccfe8"},
- {file = "freeze_core-0.4.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23483b68a6c2ca5afba5909764647a4abb249c2b9475a581e15c5e9a6a0581e1"},
- {file = "freeze_core-0.4.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:b1ff94052f0863449bdf538d431d718c21cc3be1c8055174a511d65b21255233"},
- {file = "freeze_core-0.4.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:23b096e1a3becea53f7f9cf466e9b5da0d723283c9353fafb81bef2401d7bf22"},
- {file = "freeze_core-0.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:93e88c8e465674891975f4d0c7395f9926ab4484955fbdea0b30f496a6ac5309"},
- {file = "freeze_core-0.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1080a654bad3b9658cc45cbb5528e48386e1e75569bf940405b1d1657a4b9cb0"},
- {file = "freeze_core-0.4.2-cp314-cp314-win32.whl", hash = "sha256:a5ae6eca00c8d2ca607c549e1e4dec5de15a8dadb73e03c35c58409ce4302360"},
- {file = "freeze_core-0.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:a5b67313ac10828ef067f187e87d03518fa262a4a9c9d022087b9d6e953cc8be"},
- {file = "freeze_core-0.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:c03aa08c7f2ee035655848e256d0ef99920e8038550c60a84c6dcd1f857ff1f4"},
- {file = "freeze_core-0.4.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:c4b43b52c4fc8659b9b3e29772a2b5bcc3ae5e650d30efb95e6a844294d84ce5"},
- {file = "freeze_core-0.4.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3b965d79b592b5a31fb6f3de71ca058bbc58aad7304ad65390a18cb8cf174487"},
- {file = "freeze_core-0.4.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0ae7cce7fcdcd8faa96792dab1af855e566b5ad464509887b8b7a579ac36980e"},
- {file = "freeze_core-0.4.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5e42a3fc4fae92b872503d0ee44cca9513f6dbe4edffc3a8d7dfaacaecb07e91"},
- {file = "freeze_core-0.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:438f5a1167e22f9a246414fea0aff5f5b18520c365fd30f97bc1900d25d467bb"},
- {file = "freeze_core-0.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1c756aa1bc954619ab5493830861ddbc71ded6672346f9dacaf7350ffce53fe1"},
- {file = "freeze_core-0.4.2-cp314-cp314t-win32.whl", hash = "sha256:3915f4bad2f23786ef4f78e4a3069b20e63c42d3ef2a6193f25cf0fe9f1ed82f"},
- {file = "freeze_core-0.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:815eefedf318cc569fe127c592c92ec8e176f29210a40abe1bf18595fe04f97e"},
- {file = "freeze_core-0.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:429d2f82e899e568d45a9cc942765b6af5426134fcd8a5c27b375d8969cfb836"},
- {file = "freeze_core-0.4.2.tar.gz", hash = "sha256:3e1942b0908b9399b164f66712f8b222f38512950e61d16a5064d9795f0b0ac7"},
+ {file = "freeze_core-0.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:57d430e0a7e5c5b168da8ef249939c5e3110d8cca5db45d6c32bacd73d521c9b"},
+ {file = "freeze_core-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e81b9b1c6dd614738eca9135306fc88232b374f1a0d2c9c4667520ff9e0cc17d"},
+ {file = "freeze_core-0.5.0-cp310-cp310-win32.whl", hash = "sha256:bdbce8ca7e52694c27865018786e2c7d37a579a46f1fa7c9335aab7bb20d5908"},
+ {file = "freeze_core-0.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:4862d89be1c34ca08400683b28a0c9fcfec201c2e9bc418a12eeba5465772d13"},
+ {file = "freeze_core-0.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bdd89a4e6d589a4b4a46e48ab3c5ed6898b7b76bfa349d0e26242f23885efc06"},
+ {file = "freeze_core-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:93cf6f8408f41348652e106ce94e55a0e7e6bd4c30bab2d42a2e3359b3a934a8"},
+ {file = "freeze_core-0.5.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:6b4a1c840ccacddef7e5715e97a8c6936341911d3e094347450add6afad00282"},
+ {file = "freeze_core-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4acb94f027ea93b2a1517e09bd8aeb00179cad9c568dd2c480f5056c5e4c274d"},
+ {file = "freeze_core-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0e45289b403af27cc1aa623a74703f8b65df2eb50e809069bdea296b1f5b867e"},
+ {file = "freeze_core-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ef1e58762bce8ad2ab5c7c91511a5b821f50fb880d6daa586b5e70e92c691bb7"},
+ {file = "freeze_core-0.5.0-cp311-cp311-win32.whl", hash = "sha256:6d534acc4e8b54921d04d01a3805eebaef15c792249039747b4186f0d26e81d8"},
+ {file = "freeze_core-0.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:c809e53b982686adc4feac23255882167ba7e86b7f337fcfa21dc43afcca28d9"},
+ {file = "freeze_core-0.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:cd978eb9591e5f46ff6abd458a8bd9461747bf2f72878bb5ab88c23cad5d6753"},
+ {file = "freeze_core-0.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7dc19fab5850e882b6b86bd4d09fbebf38d43d878957e74a41a31566b86bf0c1"},
+ {file = "freeze_core-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:892e07cdba5634eac6bbafe05348989a3eb0cc8e685804247c5d6fa39e9113c0"},
+ {file = "freeze_core-0.5.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:6d92bba4eb525fe57a289498ad8c7bb6b59b3558db85facbe0a3f7ad1266a432"},
+ {file = "freeze_core-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a0c43a93256686fa03f4ae41686a94c97eea54c546a166a87ca2b75f6b25c8c4"},
+ {file = "freeze_core-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b56e28f94eec90b046f4b2d832a5a17912b3547cefe2e2b1e2fcacad613a1bb2"},
+ {file = "freeze_core-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:59dd558e4386ac69be1d0e76274934c19c305b53224613769a278059b036d40e"},
+ {file = "freeze_core-0.5.0-cp312-cp312-win32.whl", hash = "sha256:e8621c7f13e6cf48327e5431c83e703f7f2d6d7f7732ee5b867e2042c66bf660"},
+ {file = "freeze_core-0.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f04e006df7004cc4af13e5e385370fce5bdd0e64e5a46cab3e0f0708c44b071a"},
+ {file = "freeze_core-0.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:147210046cc9ef56ac3d5432ce2d57b6fb23d4da30490659ae5a2935bb5dd7be"},
+ {file = "freeze_core-0.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:75cf1d482452458f3eed33b047b375fbcfa940ae4d20116f767693a64ce3159e"},
+ {file = "freeze_core-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:af99093ea6695571da23fbb7e7d95a8b0bc3cac2548edd80e4dcb43d2285678c"},
+ {file = "freeze_core-0.5.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:dc9c01e2a31e87a7ac5e7184335514ac34ae296312c15fac53d9fb2600eb3b6d"},
+ {file = "freeze_core-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cb3b158ca1a8e05c6b7aa20c102962e5cbbd96985f80501b09f6c6bdd7ed7c00"},
+ {file = "freeze_core-0.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f0270664a912d9a437bcbd67332354d0aac533c27e59dea873478a45897e1166"},
+ {file = "freeze_core-0.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6982b8eee58bd852f7a32eb87b1a66f69cf49b3fc24ae7f1f34793a1f9c3c5e0"},
+ {file = "freeze_core-0.5.0-cp313-cp313-win32.whl", hash = "sha256:96bf863416adc9a78d8bf869ec227b951452ad901896471f150f672fa7415760"},
+ {file = "freeze_core-0.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:4751bfb30741e25fc2298f85550b7e38d0ba9065d2952660c7bcfda2aaefa049"},
+ {file = "freeze_core-0.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:3663829b51a660bf9c54eb7e586d0833623151512bbbb544a1c0c8580dd8b511"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1aba0428ba7f530a5afe0b55ba8b97e656e24a43ec050de8eb0ed36c3a68b2ec"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:61e14c3d7e835c49bdd1d69b8060176a791d1c27355bad115f164f0cea353a09"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-manylinux_2_28_ppc64le.whl", hash = "sha256:21c17829a4f65bdc79850a100b3cfb09a03872d6992cb50b80a94e895f961b1b"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:089011e0e33bea9edd0890a9f13a337d9aee4004bb4aa3ee5e79e285d6054589"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4b44076c3cc7019da89a65ae1f6cfc8a064411a639385675ecccece9202f1aed"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:44d253f4a6f91ced6fe9be3df21cce1d52b81229d2b35623abd64a5e53ac4f54"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-win32.whl", hash = "sha256:f969761a869382e25822d2ea447f64c5f4d9210f8b1d95e5a9ca8718cd77948a"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-win_amd64.whl", hash = "sha256:9cad62a9b83e6aeefac2e25220b30bf146907a70e6f10a737e679e44bbab7a2b"},
+ {file = "freeze_core-0.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:97a554713e1c85d36ea0fb7dd16a622200dcd5fcac0c90b11005296c4d08198f"},
+ {file = "freeze_core-0.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:99b09188be89186e1666c7cf22a46e43c9eebedf2098f17f3b53e8a5c3e93966"},
+ {file = "freeze_core-0.5.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:8122dd9434b62aa8883194c754861117d61321c08af386fc581d17ac74fecbbe"},
+ {file = "freeze_core-0.5.0-cp314-cp314-manylinux_2_28_ppc64le.whl", hash = "sha256:a0969a6a74d15dbcee638f9adea07dc18e0027d917a70f12cd550459a330ade0"},
+ {file = "freeze_core-0.5.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d70d04d4036d9902dcb2532a3e36ede601bd6b35f71176981d512f315c9a0bb7"},
+ {file = "freeze_core-0.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fed09e4484fcf8744543d2d177a4fa6493b6cddab9204f95eaeb82d41c372b7e"},
+ {file = "freeze_core-0.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c68f2250ec5fca04852d1bf86e28d40261f4ecaaaddc752c7644958895e1909c"},
+ {file = "freeze_core-0.5.0-cp314-cp314-win32.whl", hash = "sha256:1c7ef797fa89e7de097cc04ff50267ab207fc099cc196149bc044439f8c3eb48"},
+ {file = "freeze_core-0.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:9245d64714b8b269e5f8eb583038f6c5f50126a65a298098bec03fa16054a56b"},
+ {file = "freeze_core-0.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:51c3918177241f5046cff9ce832acb931b16b453a2bbfe29e6c2fe979c8ec176"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:377e68b6f20867bd8547ca3a9073941231ec3fd2ee2d1649a744360711925dcf"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3e913aa1e5c5f9fbdbd9b9bf613e0083d185e587ab23690f8207fc3bb586d2a2"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:833b18cabe4f405702607220a2b429a36e3979e52c9be768307dcb7fbc60fc4f"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:38011b6cd234cb419cecfd2934b6907739ddeaaabb570d9ffa36812a366f05fb"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0a390702f0a5dc48139ce361cf24b8349df2441255ccc4a6263bf9dc2d387d6d"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b9705a6d967c70475bfedf16ea6dca6d1909f31ea6e0c1c0798369c9001ee5"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-win32.whl", hash = "sha256:ea290461ceab8bb4d6954183ab3aa7ee92098e254e3167a7a1e3d88bf603c9ca"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:17dc8cadac946bb7de8632d7009aa76d9612d2ee9cc056406a02be491be418f3"},
+ {file = "freeze_core-0.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9e0ddf52dadab75881bca159bfe3876c8cc7e3727ee098da918dfbc4920970b2"},
+ {file = "freeze_core-0.5.0.tar.gz", hash = "sha256:6178c3e40cda56b41187452cfd60347c343db067a4f6a157196e634050a5fe57"},
]
[package.dependencies]
cabarchive = {version = ">=0.2.4", markers = "sys_platform == \"win32\""}
-filelock = ">=3.15.3"
+filelock = ">=3.20.1"
striprtf = {version = ">=0.0.26", markers = "sys_platform == \"win32\""}
[package.extras]
-dev = ["bump-my-version (==1.2.4)", "cibuildwheel (==3.3.0)", "pre-commit (==4.5.0)"]
-tests = ["coverage (==7.12.0)", "pytest (==9.0.1)"]
+dev = ["bump-my-version (==1.2.6)", "cibuildwheel (==3.3.1)", "pre-commit (==4.5.1)"]
+tests = ["coverage (==7.13.1)", "pytest (==9.0.2)"]
[[package]]
name = "frozenlist"
@@ -1093,14 +1093,14 @@ files = [
[[package]]
name = "hypothesis"
-version = "6.150.0"
+version = "6.150.2"
description = "The property-based testing library for Python"
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "hypothesis-6.150.0-py3-none-any.whl", hash = "sha256:caf1f752418c49ac805f11d909c5831aaceb96762aa3895e0c702468dedbe3fe"},
- {file = "hypothesis-6.150.0.tar.gz", hash = "sha256:ac263bdaf338f4899a9a56e8224304e29b3ad91799e0274783c49abd91ea35ac"},
+ {file = "hypothesis-6.150.2-py3-none-any.whl", hash = "sha256:648d6a2be435889e713ba3d335b0fb5e7a250f569b56e6867887c1e7a0d1f02f"},
+ {file = "hypothesis-6.150.2.tar.gz", hash = "sha256:deb043c41c53eaf0955f4a08739c2a34c3d8040ee3d9a2da0aa5470122979f75"},
]
[package.dependencies]
diff --git a/pyproject.toml b/pyproject.toml
index a8812391..7ebd62fc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "reticulum-meshchatx"
-version = "4.0.0"
+version = "4.1.0"
description = "A simple mesh network communications app powered by the Reticulum Network Stack"
authors = [
{name = "Sudo-Ivan"}
diff --git a/tests/backend/test_app_status_tracking.py b/tests/backend/test_app_status_tracking.py
index 4235579d..3bcb2312 100644
--- a/tests/backend/test_app_status_tracking.py
+++ b/tests/backend/test_app_status_tracking.py
@@ -94,8 +94,8 @@ async def test_app_status_endpoints(mock_rns_minimal, temp_dir):
app_instance.config.set("tutorial_seen", True)
assert app_instance.config.get("tutorial_seen") == "true"
- app_instance.config.set("changelog_seen_version", "4.0.0")
- assert app_instance.config.get("changelog_seen_version") == "4.0.0"
+ app_instance.config.set("changelog_seen_version", "4.1.0")
+ assert app_instance.config.get("changelog_seen_version") == "4.1.0"
# Test app_info returns these values
with ExitStack() as info_stack:
@@ -111,4 +111,4 @@ async def test_app_status_endpoints(mock_rns_minimal, temp_dir):
assert val == "true"
val = app_instance.config.get("changelog_seen_version")
- assert val == "4.0.0"
+ assert val == "4.1.0"
diff --git a/tests/frontend/AppModals.test.js b/tests/frontend/AppModals.test.js
index ab2df878..6d138bc4 100644
--- a/tests/frontend/AppModals.test.js
+++ b/tests/frontend/AppModals.test.js
@@ -60,9 +60,9 @@ describe("App.vue Modals", () => {
return Promise.resolve({
data: {
app_info: {
- version: "4.0.0",
+ version: "4.1.0",
tutorial_seen: true,
- changelog_seen_version: "4.0.0",
+ changelog_seen_version: "4.1.0",
},
},
});
@@ -92,7 +92,7 @@ describe("App.vue Modals", () => {
return Promise.resolve({
data: {
app_info: {
- version: "4.0.0",
+ version: "4.1.0",
tutorial_seen: false,
changelog_seen_version: "0.0.0",
},
@@ -150,7 +150,7 @@ describe("App.vue Modals", () => {
return Promise.resolve({
data: {
app_info: {
- version: "4.0.0",
+ version: "4.1.0",
tutorial_seen: true,
changelog_seen_version: "3.9.0",
},
@@ -158,7 +158,7 @@ describe("App.vue Modals", () => {
});
}
if (url === "/api/v1/app/changelog") {
- return Promise.resolve({ data: { html: "<h1>New Features</h1>", version: "4.0.0" } });
+ return Promise.resolve({ data: { html: "<h1>New Features</h1>", version: "4.1.0" } });
}
if (url === "/api/v1/config") return Promise.resolve({ data: { config: { theme: "dark" } } });
if (url === "/api/v1/auth/status") return Promise.resolve({ data: { auth_enabled: false } });
diff --git a/tests/frontend/ChangelogModal.test.js b/tests/frontend/ChangelogModal.test.js
index bdf4ebb9..9cab1313 100644
--- a/tests/frontend/ChangelogModal.test.js
+++ b/tests/frontend/ChangelogModal.test.js
@@ -78,7 +78,7 @@ describe("ChangelogModal.vue", () => {
axiosMock.get.mockResolvedValue({
data: {
html: "<h1>Test</h1>",
- version: "4.0.0",
+ version: "4.1.0",
},
});
@@ -95,7 +95,7 @@ describe("ChangelogModal.vue", () => {
axiosMock.get.mockResolvedValue({
data: {
html: "<h1>Test</h1>",
- version: "4.0.0",
+ version: "4.1.0",
},
});
@@ -114,7 +114,7 @@ describe("ChangelogModal.vue", () => {
axiosMock.get.mockResolvedValue({
data: {
html: "<h1>Test</h1>",
- version: "4.0.0",
+ version: "4.1.0",
},
});
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────